package object3;

/**
 * 设计模式-单例模式
 */
public class SingleTon01 {

    public static void main(String[] args) {

        /*
            设计模式是静态方法和属性的经典使用
            单例模式：
            1)就是采取一定的方法保证在整个的软件系统中，对某个类只能存在一个对象实例，并且该类只提供一个取得其对象实例的方法
            2)单例模式有两种方式:懒汉式、饿汉式
         */

        //通过方法可以获取对象
        GirlFriend instance = GirlFriend.getInstance();
        System.out.println(instance);

        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2);

        System.out.println(instance == instance2);//true
    }
}

class GirlFriend {

    private String name;

    //public static int n1 = 100;
    //为了能够在静态方法中，返回gf对象，需要将其修饰为static对象，通常是重量级的对象，饿汉式可能造成创建了对象，但是没有使用
    private static GirlFriend gf = new GirlFriend("小红");

    //如何保证只能创建一个GirlFriend对象
    //1.构造器私有化
    //2.在类的内部直接创建对象
    //3.提供一个公共的static方法，返回 gf 对象
    private GirlFriend(String name) {
        System.out.println("构造器被调用...");
        this.name = name;
    }

    public static GirlFriend getInstance() {
        return gf;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}